package com.abm;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.abm.data.DatabaseManager;
import com.abm.dbclases.Product;
import com.abm.entity.ListaActividad;

//Actividad principal donde trabajaremos nuestra Activity ABM de Productos.
public class ProductActivity extends ListaActividad {
	//referencia a la ListView que utilizaremos para mostrar los productos
	ListView listView;
	//referencia al List donde guardaremos los productos de manera temporal
	List<Product> productList;
	//referencia a la lista de Strings donde guardaremos los nombres de los productos de manera temporal.
	List<String> productListStr;
	//Propiedad donde guardaremos la instancia de la clase DatabaseManager para trabajar con los métodos de acceso
	//al DAO y las consultas
	private DatabaseManager manager;
	//Propuedad de tipo Context para poder acceder a los recursos
	private Context mContext;
	public static String PATH_APPDIRs = "sistema_ventas";
	private Dialog customDialog;
	private ImageButton btn_add;
	//Propiedad estática de tipo Product donde editaremos objetos de dicho tipo para setearle sus valores y 
	//darlo como parámetro a la hora de la inserción en la base de datos.
	public static Product productEdit = null;

	public TextView tv_stock;

	public TextView tv_cantity;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.abm_product_inventory);

		mContext = getApplicationContext();
		manager = DatabaseManager.getInstance();

		
		//creamos la referencia del boton btn_add con el XML
		//tener presionado control+botón izquierdo del mouse para entender a que objeto del XML
		//hace referencia ".abm_productadd)
		btn_add = (ImageButton) findViewById(R.id.abm_productadd);
		//creamos el Listener para que responda al evento al ser presionado
		btn_add.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				//creamos un objeto de tipo intent, ya que queremos llamar a otra activity en nuestro caso.
				//recordar que mediante los intents podemos tambien hacer llamadas, enviar mensajes y otras operaciones.
				Intent intent = new Intent();
				//seteamos la clase a ser llamada.
				intent.setClass(getApplicationContext(),
						AddProductActivity.class);
				//hacemos la llamada al Activity que hemos seteado previamente.
				startActivity(intent);

			}
		});
		
		listView = (ListView) getListView();
		updateList_customAdapter();

		// ##################################################################################################################
		// click
		// ##################################################################################################################
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1,
					int position, long arg3) {
				try {
					if (productList.size() <= 0)
						return;

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private void updateList_customAdapter() {
		productList = manager.getAllproduct();
		productListStr = new ArrayList<String>();
		if (productList.size() > 0) {
			for (Product item : productList) {
				productListStr.add(item.getName());
				registerForContextMenu(listView);
			}
		} else {
			productListStr
					.add(getResources().getString(R.string.no_item_added));
			unregisterForContextMenu(listView);
		}
		productList = manager.getAllproduct();
		
		CustomAdapter_product_iconrow_custom customAdapter = new CustomAdapter_product_iconrow_custom(
				mContext, productList);

		listView.setAdapter(customAdapter);

	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		updateList_customAdapter();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		return false;

	}

	@Override
	public boolean onOptionsItemSelected(MenuItem menu) {


		return false;
	}

	/**
	 * @param String
	 *            message
	 * @param String
	 *            title
	 * @return
	 */
	public Dialog showDialogEliminar(String message, String title, final int ID) {
		//

		customDialog = new Dialog(ProductActivity.this);
		customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
		customDialog.setContentView(R.layout.simpledialog_okcancel);
		customDialog.setCancelable(false);

		TextView tv_title = (TextView) customDialog
				.findViewById(R.id.simpledialog_okcancel_title);
		TextView tv_text = (TextView) customDialog
				.findViewById(R.id.simpledialog_okcancel_text);
		Button btn_ok = (Button) customDialog
				.findViewById(R.id.simpledialog_okcancel_ok);
		Button btn_cancel = (Button) customDialog
				.findViewById(R.id.simpledialog_okcancel_cancel);

		tv_title.setText(title);
		tv_text.setText(message);

		btn_ok.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				manager.deleteProductByID(ID);
				updateList_customAdapter();
				customDialog.cancel();
				// finish();
			}
		});

		btn_cancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				customDialog.cancel();
				// finish();
			}
		});
		return customDialog;
	}

	

	public class CustomAdapter_product_iconrow_custom extends BaseAdapter
			implements Filterable {
		/**
		 * 
		 */
		private Context mContext;
		private List<Product> list_product;

	
		public CustomAdapter_product_iconrow_custom(Context context,
				List<Product> productList) {
			// super(context, R.layout.simpleiconrow, list);
			// super();
			mContext = context;
			this.list_product = productList;

		}

		public View getView(final int position, View v, ViewGroup parent) {
			View mView = v;
			if (mView == null) {
				LayoutInflater vi = (LayoutInflater) mContext
						.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				mView = vi.inflate(R.layout.iconrow_custom, null);
			}

			TextView tv_title = (TextView) mView
					.findViewById(R.id.iconrow_custom_tv_title);
			TextView tv_stock = (TextView) mView
					.findViewById(R.id.iconrow_custom_tv_desc);

			ImageView img = (ImageView) mView
					.findViewById(R.id.iconrow_custom_imv_pic);

			ImageButton imb_delete = (ImageButton) mView
					.findViewById(R.id.iconrow_custom_imb_delete);
			ImageButton imb_edit = (ImageButton) mView
					.findViewById(R.id.iconrow_custom_imb_edit);
			ImageButton imb_add = (ImageButton) mView
					.findViewById(R.id.iconrow_custom_imagebutton_addproduct);

			imb_add.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					productEdit = productList.get(position);

	
				}
			});

			if (list_product.get(position) != null) {
				tv_title.setTextColor(Color.BLACK);
				tv_title.setText(list_product.get(position).getName());

				tv_stock.setTextColor(Color.BLACK);

				String desc = "Stock:"
						+ list_product.get(position).getQuantity();
				tv_stock.setText(desc);

				// Peter
				String strPicture = list_product.get(position).getPhoto();
				try {
					if (!strPicture.equals("")) {
						String strFile = Environment
								.getExternalStorageDirectory()
								+ "/"
								+ PATH_APPDIRs + "/" + strPicture;
						File file = new File(strFile);

						System.out
								.println("productactivity  foto : " + strFile);
						if (file.exists()) {
							Bitmap myBitmap = BitmapFactory.decodeFile(file
									.getAbsolutePath());
							img.setImageBitmap(myBitmap);
						} else {

						}
					}

				} catch (Exception e) {
					e.printStackTrace();
				}

	

			}

			imb_delete.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {}
			});

			imb_edit.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {}
			});

			// v.setBackground(mContext.getResources().getDrawable(
			// R.drawable.fondolist));

			return mView;
		}

		public int getCount() {
			return list_product.size();
		}

		public Object getItem(int position) {
			return list_product.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		@Override
		public Filter getFilter() {
			return new Filter() {

				@SuppressWarnings("unchecked")
				@Override
				protected void publishResults(CharSequence constraint,
						FilterResults results) {
					list_product = (List<Product>) results.values;
					CustomAdapter_product_iconrow_custom.this
							.notifyDataSetChanged();
				}

				@Override
				protected FilterResults performFiltering(CharSequence constraint) {
					List<Product> filteredResults = getFilteredResults(constraint);
					FilterResults results = new FilterResults();
					results.values = filteredResults;
					return results;
				}
			};
		}

		protected List<Product> getFilteredResults(CharSequence constraint) {
			ArrayList<Product> filteredList = new ArrayList<Product>();
			for (Product c : list_product) {
				if (c.getName().trim().toLowerCase()
						.startsWith(constraint.toString().trim().toLowerCase())) {
					filteredList.add(c);
				}
			}
			return filteredList;
		}

	}
}
